<?php

namespace Database\Seeders;

use App\Models\User;
use Faker\Generator;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 获取 Faker 实例
        $faker = app(Generator::class);
        // 头像假数据
        $avatars = [
            'https://cdn.learnku.com/uploads/images/201710/14/1/s5ehp11z6s.png',
            'https://cdn.learnku.com/uploads/images/201710/14/1/Lhd1SHqu86.png',
            'https://cdn.learnku.com/uploads/images/201710/14/1/LOnMrqbHJn.png',
            'https://cdn.learnku.com/uploads/images/201710/14/1/xAuDMxteQy.png',
            'https://cdn.learnku.com/uploads/images/201710/14/1/ZqM7iaP4CR.png',
            'https://cdn.learnku.com/uploads/images/201710/14/1/NDnzMutoxX.png',
        ];
        // 生成数据集合
        // $users = factory(User::class) //factory(User::class) 根据指定的 User 生成模型工厂构造器，对应加载 UserFactory.php 中的工厂设置
        $users = User::factory() //factory(User::class) 根据指定的 User 生成模型工厂构造器，对应加载 UserFactory.php 中的工厂设置
        ->times(10)  // 生成 10 个用户数据
        ->make()            // 将结果生成为 集合对象
        ->each(function ($user, $index) //是集合对象提供的方法,用来迭代集合中的内容并将其传递到回调函数中
        use ($faker, $avatars) {
            // 从头像数组中随机取出一个并赋值
            $user->avatar = $faker->randomElement($avatars);
        });
        // 让隐藏字段可见，并将数据集合转换为数组，不加这一行代码，UserFactory里编写的 password 的值就无法插入了
        $user_array = $users->makeVisible(['password'])->toArray();
        // 插入到数据库中
        User::query()->insert($user_array);
        // 单独处理第一个用户的数据
        $user         = User::query()->find(1);
        $user->nickname   = 'Summer';
        $user->avatar = 'https://cdn.learnku.com/uploads/images/201710/14/1/ZqM7iaP4CR.png';

        $user->save();
    }
}
